home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
HARDWARE
/
IICALARM
/
!iicAlarm
/
ABoot
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1994-05-04
|
5KB
|
192 lines
> AlarmBoot030
Setzen der Systemvariablen <AlarmMode>
0 - normaler Start
1 - Automatikstart
Wir testen ob die Alarmleitung gesetzt ist und ob das Alarmsystem
aktiv war. -> Setzen der Variablen.
Wir lesen die Alarmzeit der Uhr und vergleichen sie mit der Uhrzeit.
Ist die Alarmzeit mehr als 5 Minuten hinter der aktuellen Zeit, so
heben wir den Automatikstart wieder auf.
+ 8192
globale Variablen
>clkadr% = %10100000 :
IIC-Adresse der Archimedes-Uhr
=file$ = "<Alarmfile>" :
Name und Pfad der Alarm-Datei
cur% 8, alm% 8, buf% 32, ord% 40, str% 64
"Error in ";
"*CLOSE":
8debug% =
:
Informationstexte anzeigen ?
"XOS_ReadVarVal", "AlarmExt$Debug", buf%, -1, 0, 0
,,d%
d%<>0
debug% =
"XWimp_ReadSysInfo", 3
d%=0
debug% =
debug%
"AlarmBoot version 0.30, ABt."
5x% =
alarmCheck :
Teste das Alarmsystem.
(x%
6) = 6
Die Alarmleitung ist gesetzt...
+
debug%
"The Alarmline is set."
!G
weitere Auswertung. Wir vergleichen mit dem 5ByteBlock, ob die
"C
Alarm-Zeit + 5 Minuten noch groesser ist als die Echtzeit.
#1
"Territory_ReadCurrentTimeZone"
,zone%
$E
Hole aktuelle Zeit als 5 Byte Block UTC, PRM 565, PRM3 1-421
%' ?cur% = 3:
"OS_Word", 14, cur%
debug%
'N
"Territory_ConvertStandardDateAndTime", -1, cur%, str%, 60
,end%
?end% = 13
)
"current Time: "$str%
+G
Wir bereiten den Alarmbuffer vor und setzen das aktuelle Jahr.
,9
"Territory_ConvertTimeToUTCOrdinals",,cur%, ord%
-/
Wir holen den Alarmbuffer aus der Uhr.
.= ?buf% = 8 :
Startadresse
/=
"IIC_Control", clkadr% , buf%, 1 :
write address
0:
"IIC_Control", clkadr%+1, buf%, 8 :
read alarm
25
BCD-Buffer in den Ordinal-Buffer dekodieren.
3H
Ausserdem koennen wir unsere Zeitmodifikationen anbringen, also
4C
die Zeitzone draufaddieren und unseren Bereich dazunehmen.
5= ord%!0 = ((buf%?1
15) + ((buf%?1 >>>4)*10)) + zone%
65 ord%!4 = ((buf%?2
15) + ((buf%?2 >>>4)*10))
79 ord%!8 = ((buf%?3
15) + ((buf%?3 >>>4)*10)) + 5
85 ord%!12 = ((buf%?4
15) + ((buf%?4 >>>4)*10))
95 ord%!16 = ((buf%?5
15) + ((buf%?5 >>>4)*10))
:5 ord%!20 = ((buf%?6
15) + ((buf%?6 >>>4)*10))
;*
--> Ordinale jetzt in local time.
<:
"Territory_ConvertOrdinalsToTime", -1, alm%, ord%
=+
--> jetzt alm% in UTC + 5 Minuten.
debug%
?N
"Territory_ConvertStandardDateAndTime", -1, alm%, str%, 60
,end%
?end% = 13
A
"Alarmtime: +5 "$str%
CC
Jetzt vergleichen, cur% < alm%, dann war Alarm in Ordnung.
D! a$ =
bufferTOstring(cur%)
E! b$ =
bufferTOstring(alm%)
a$,5) <
b$,5)
*SETEVAL AlarmMode 1
H4
debug%
"This is an automatic start."
*SETEVAL AlarmMode 0
K0
debug%
"Alarm out of time-limit."
*SETEVAL AlarmMode 0
O,
debug%
"The user has started !"
SN;-------------------------------------------------------------------------
TG; Lesen eines Bytes von einer beliebigen Adresse. Kann auch benutzt
U'; werden, um die Adresse zu setzen.
VN;-------------------------------------------------------------------------
peek(address%)
blk%
blk% 2
clkadr% = 0
clkadr% = %10100000
?blk% = address%
"IIC_Control", clkadr%, blk%, 1 :
write address
"IIC_Control", clkadr%+1, blk%, 1 :
read value
= ?blk%
_N;-------------------------------------------------------------------------
`G; Auswerten der beiden Statusregister um zu bestimmen ob die Alarm-
aH; Leitung gesetzt (0) ist und ob das Alarm-System eingeschaltet ist.
b!; = Status (>0 = Alarm aktiv)
; Bit0= 1 Timer-Alarm
; Bit1= 2 Alarm
e&; Bit2= 4 Alarm-System ist AN
fN;-------------------------------------------------------------------------
alarmCheck
str%, alm%, out%
str% =
peek(0)
str%<4
kE
Das Alarm-System ist aus. Bit0 zeigt den Ausgangszustand von
l%
Alarm. Bit0=1: Alarm=AKTIV=0
= str%
o!
Das Alarm-System ist an.
p)
Bit0 zeigt einen Timer-Alarm an.
q#
Bit1 zeigt einen Alarm an.
rB
Dies gilt auch wenn Bit7 -stop counting- gesetzt -1- ist.
s8
B0, B1 werden noch maskiert vom Alarm-Register.
alm% =
peek(8)
out% = 4
v5
(alm%
7)>0
(alm%
8)=8
out% += 1
w5
(alm%
48)>0
(alm%
128)=128
out% += 2
= str%
out%
Umsetzen des Buffers in einen String. So kann er einfach als String
verglichen werden !
bufferTOstring(buffer%)
~H =
(buffer%?4)+
(buffer%?3)+
(buffer%?2)+
(buffer%?1)+
(buffer%?0)